Razeni v ListView II
Otázka od: Vymazal Milan
22. 10. 2002 12:20
From: "Vymazal Milan" <vymazal.milan@seznam.cz>
> function CustomSortProc1(Item1, Item2: TListItem; ParamSort: integer):
integer; stdcall;
> var
> c1,c2:integer;
> begin
> try
> c1:=StrToInt(Item1.Caption);
> c2:=StrToInt(Item2.Caption);
> if c1>c2 then result:=1 else
> if c1<c2 then result:=-1 else result:=0;
> except
>
Result:=lstrcmp(PChar(TListItem(Item1).Caption),PChar(TListItem(Item2).Caption
));
> end;
> end;
To je ponekud zbytecne prekombinovane, navic v pripade kde predpokladas vyskyt
dat, ktere nelze prevest na cislo je pouziti vyjimky krajne nevhodne, protoze
jde o ocekavanou situaci. Cele by to slo udelat treba takto:
function CustomSortProc(Item1, Item2: TListItem; ParamSort: Integer): Integer;
stdcall;
var
N1, N2: Integer;
begin
if TryStrToInt(Item1.Caption, N1) and TryStrToInt(Item2.Caption, N2) then
Result := N1 - N2
else
Result := CompareStr(Item1.Caption, Item2.Caption);
end;
hmm. asi jsem nejak natvrdlej ale TryStrToInt mi nejak nejde . Delphi
mi to nejka neberou
> ale potreboval bych udelat i sort druheho sloupecku ktery taky
> obsahuje cisla. Skousel jsem to udelat takto ale asi jsem to
function CustomSortProc(Item1, Item2: TListItem; ParamSort: Integer): Integer;
stdcall;
function ValueCompare(const V1, V2: string): Integer;
var
N1, N2: Integer;
begin
if TryStrToInt(V1, N1) and TryStrToInt(V2, N2) then
Result := N1 - N2
else
Result := CompareStr(V1, V2);
end;
begin
Result := ValueCompare(Item1.Caption, Item2.Caption);
if Result = 0 then
Result := ValueCompare(Item1.SubItems[0], Item2.SubItems[0]);
end;
Petr Vones
Odpovedá: Petr Vones
20. 10. 2002 21:32
From: "Vymazal Milan" <vymazal.milan@seznam.cz>
> function CustomSortProc1(Item1, Item2: TListItem; ParamSort: integer):
integer; stdcall;
> var
> c1,c2:integer;
> begin
> try
> c1:=StrToInt(Item1.Caption);
> c2:=StrToInt(Item2.Caption);
> if c1>c2 then result:=1 else
> if c1<c2 then result:=-1 else result:=0;
> except
>
Result:=lstrcmp(PChar(TListItem(Item1).Caption),PChar(TListItem(Item2).Caption
));
> end;
> end;
To je ponekud zbytecne prekombinovane, navic v pripade kde predpokladas vyskyt
dat, ktere nelze prevest na cislo je pouziti vyjimky krajne nevhodne, protoze
jde o ocekavanou situaci. Cele by to slo udelat treba takto:
function CustomSortProc(Item1, Item2: TListItem; ParamSort: Integer): Integer;
stdcall;
var
N1, N2: Integer;
begin
if TryStrToInt(Item1.Caption, N1) and TryStrToInt(Item2.Caption, N2) then
Result := N1 - N2
else
Result := CompareStr(Item1.Caption, Item2.Caption);
end;
> ale potreboval bych udelat i sort druheho sloupecku ktery taky
> obsahuje cisla. Skousel jsem to udelat takto ale asi jsem to
function CustomSortProc(Item1, Item2: TListItem; ParamSort: Integer): Integer;
stdcall;
function ValueCompare(const V1, V2: string): Integer;
var
N1, N2: Integer;
begin
if TryStrToInt(V1, N1) and TryStrToInt(V2, N2) then
Result := N1 - N2
else
Result := CompareStr(V1, V2);
end;
begin
Result := ValueCompare(Item1.Caption, Item2.Caption);
if Result = 0 then
Result := ValueCompare(Item1.SubItems[0], Item2.SubItems[0]);
end;
Petr Vones
Odpovedá: Vymazal Milan
22. 10. 2002 13:40
VM> From: "Vymazal Milan" <vymazal.milan@seznam.cz>
>> function CustomSortProc1(Item1, Item2: TListItem; ParamSort: integer):
VM> integer; stdcall;
>> var
>> c1,c2:integer;
>> begin
>> try
>> c1:=StrToInt(Item1.Caption);
>> c2:=StrToInt(Item2.Caption);
>> if c1>c2 then result:=1 else
>> if c1<c2 then result:=-1 else result:=0;
>> except
>>
VM>
Result:=lstrcmp(PChar(TListItem(Item1).Caption),PChar(TListItem(Item2).Caption
VM> ));
>> end;
>> end;
VM> To je ponekud zbytecne prekombinovane, navic v pripade kde predpokladas
vyskyt
VM> dat, ktere nelze prevest na cislo je pouziti vyjimky krajne nevhodne,
protoze
VM> jde o ocekavanou situaci. Cele by to slo udelat treba takto:
VM> function CustomSortProc(Item1, Item2: TListItem; ParamSort: Integer):
Integer;
VM> stdcall;
VM> var
VM> N1, N2: Integer;
VM> begin
VM> if TryStrToInt(Item1.Caption, N1) and TryStrToInt(Item2.Caption, N2) then
VM> Result := N1 - N2
VM> else
VM> Result := CompareStr(Item1.Caption, Item2.Caption);
VM> end;
hmm. asi jsem nejak natvrdlej ale TryStrToInt mi nejak nejde . Delphi
mi to nejka neberou
Milan
Odpovedá: Petr Vones
22. 10. 2002 13:44
From: "Vymazal Milan" <vymazal.milan@seznam.cz>
> hmm. asi jsem nejak natvrdlej ale TryStrToInt mi nejak nejde . Delphi
> mi to nejka neberou
Patrne mas starsi verzi Delphi, jelikoz nebyla verze v dotazu uvedena tak
implicitne predpokladam posledni verzi, tedy 7. Funkce TryStrToInt je vcelku
jednoducha, muze vypadat treba takhle:
function TryStrToInt(const S: string; var Value: Integer): Boolean;
var
Error: Integer;
begin
Val(S, Value, Error);
Result := (Error = 0);
end;
Petr Vones
Odpovedá: Vymazal Milan
22. 10. 2002 15:59
Hello Petr,
Tuesday, October 22, 2002, 2:42:35 PM, you wrote:
PV> From: "Vymazal Milan" <vymazal.milan@seznam.cz>
>> hmm. asi jsem nejak natvrdlej ale TryStrToInt mi nejak nejde . Delphi
>> mi to nejka neberou
PV> Patrne mas starsi verzi Delphi, jelikoz nebyla verze v dotazu uvedena tak
PV> implicitne predpokladam posledni verzi, tedy 7. Funkce TryStrToInt je
vcelku
PV> jednoducha, muze vypadat treba takhle:
PV> function TryStrToInt(const S: string; var Value: Integer): Boolean;
PV> var
PV> Error: Integer;
PV> begin
PV> Val(S, Value, Error);
PV> Result := (Error = 0);
PV> end;
Diky moc. mam totiz Delphi 5. ale nevedel jsem ze tam jsou nejake
rozdili tohoto typu
PV> Petr Vones
--
Best regards,
Vymazal mailto:vymazal.milan@seznam.cz